package com.dhecp.project.system.service;

import java.util.List;
import java.util.Map;

import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.project.system.domain.SysDictionaryForExport;
import com.dhecp.project.system.domain.SysDictionaryForField;
import com.dhecp.project.system.domain.SysDictionaryForPageField;
import com.dhecp.project.system.domain.SysFieldForConditions;

/**
 * 字段数据字典、属性、查询条件、数据权限
 * @author DH-Xxj
 * @version 2019年8月28日
 */
public interface SysDictionaryForFieldService {
	
	/**
     * 直接查询字段数据表
     * @param params
     * @return List
     * @author DH-Xxj
     */
    List<SysDictionaryForField> queryDictionaryForField(Map<String, Object> params) throws Exception;

    /**
     * 根据表名查询字段
     * @param params
     * @return List
     * @author lwl
     */
    List<SysDictionaryForField> queryDictionaryForFieldByTableName(Map<String, Object> params) throws Exception;
    
    /**
     * 根据guid查询字段
     * @param guid
     * @return 实体SysDictionaryForField
     * @author lwl
     */
    SysDictionaryForField queryDictionaryForFieldByGuid(String guid);

	/**
	 * 获取导入模板、导出数据 字段列表(以List形式返回)
	 * @param moduleTable 必要参数：功能唯一标识
     * @param entity 必要参数：用于获取实体属性名取代对应字典字段名，解决大小写敏感问题
	 * @param getFieldAttributesType 可选参数：查询范围（export：导出字段，template：导入模板字段，templateedit：可编辑导入模板字段）
	 * @param getFieldAttributesSystemType 可选参数：类型【web：网页端；mobile：手机端】
	 * @param specifiedExportFields 可选参数：指定要导出的字段，示例：Field1,Field2,Field3
	 * @return List-SysDictionaryForExport
	 * @author DH-Xxj
	 */
	List<SysDictionaryForExport> queryExportFieldList(Map<String, Object> params);
	
	/**
	 * 获取功能页面中字段及各属性(以List形式返回)
	 * @param moduleTable 必要参数：功能唯一标识
     * @param entity 必要参数：用于获取实体属性名取代对应字典字段名，解决大小写敏感问题
	 * @param matchUserDefined 可选参数：是否使用用户自定义字段属性（1：结果受用户自定义字段属性影响[默认]，0：结果忽略用户自定义字段属性）
	 * @param getFieldAttributesType 可选参数：查询范围（page：全部字段[默认]，pagecallin：调入页网格，pageinhead：头部字段，pageinbottom：底部字段，pagenotingrid：非网格字段，pageingrid：网格字段，pagestatic：静态字段）
	 * @param getFieldAttributesSystemType 可选参数：类型【web：网页端；mobile：手机端】
	 * @return List-DictionaryForField
	 * @author DH-Xxj
	 */
	List<SysDictionaryForPageField> queryFieldAttributesList(Map<String, Object> params);
	
	/**
	 * 获取功能页面中字段及各属性(以Map形式返回)
	 * @param moduleTable 必要参数：功能唯一标识
     * @param entity 必要参数：用于获取实体属性名取代对应字典字段名，解决大小写敏感问题
	 * @param matchUserDefined 可选参数：是否使用用户自定义字段属性（1：结果受用户自定义字段属性影响[默认]，0：结果忽略用户自定义字段属性）
	 * @param getFieldAttributesType 可选参数：查询范围（page：全部字段[默认]，pagecallin：调入页网格，pageinhead：头部字段，pageinbottom：底部字段，pagenotingrid：非网格字段，pageingrid：网格字段，pagestatic：静态字段）
	 * @param getFieldAttributesSystemType 可选参数：类型【web：网页端；mobile：手机端】
	 * @return Map
	 * @author DH-Xxj
	 */
	Map<String, Object> queryFieldAttributesMap(Map<String, Object> params);

	/**
	 * 获取作为查询条件的字段
	 * @param moduleTable 必要参数：功能唯一标识
	 * @return List -SysFieldForConditions
	 * @author DH-Xxj
	 */
	List<SysFieldForConditions> queryFieldFrontConditions(Map<String, Object> params);

	/**
	 * 获取作为导入模板的字段
	 * @param moduleTable 必要参数：功能唯一标识
     * @param entity 必要参数：用于获取实体属性名取代对应字典字段名，解决大小写敏感问题
	 * @return List-Object(json格式数组)
	 * @author DH-Xxj
	 */
	Object queryFieldFrontImport(Map<String, Object> params);

	/**
	 * 获取查询条件SQL语句
	 * @param moduleTable 必要参数：功能唯一标识
	 * @param tablealias 可选参数：查询条件作用表别名，调用方法时传入，可缺省
	 * @param nowherestr 可选参数：若存在（任意值），表示不进行条件过滤
	 * @return String
	 * @author DH-Xxj
	 * @throws Exception 
	 */
	String getWhereStr(Map<String, Object> params) throws Exception;

	/**
	 * 获取存储过程参数字符串
	 * @param params
	 * @return String
	 * @author DH-Xxj
	 */
	String getProcedureParams(Map<String, Object> params);

	/**
	 * 获取数据权限查询条件SQL语句
	 * @param moduleTable 必要参数：功能唯一标识
	 * @param tablealias 可选参数：查询条件作用表别名，调用方法时传入，可缺省
	 * @param nodatascode 可选参数：若存在（任意值），表示不进行数据权限控制
	 * @return String
	 * @author DH-Xxj
	 * @throws Exception 
	 */
	String getDataScode(Map<String, Object> params) throws Exception;

	/**
	 * 新增功能字段数据字典
	 * @param params
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertDictionaryForField(Map<String, Object> params);

	/**
	 * 修改功能字段数据字典
	 * @param params
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateDictionaryForField(Map<String, Object> params);

	/**
	 * 删除功能字段数据字典
	 * @param params
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteDictionaryForField(Map<String, Object> params);
	
	/**
	 * 根据 moduleTable 获取数据
	 * @param params
	 * @return
	 * @author DH-Xxj
	 */
	List<SysDictionaryForField> getDictionaryForFieldModuleTableData(String moduleTable);

	/**
	 * 同步列名
	 * @param  moduleTable
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult tblm(String moduleTable);
}